home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Src / lconsole / msgs.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  4.4 KB  |  205 lines

  1. /* msgs.c: msg functions */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Src/lconsole/RCS/msgs.c,v 6.0 1991/12/18 20:27:16 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Src/lconsole/RCS/msgs.c,v 6.0 1991/12/18 20:27:16 jpo Rel $
  9.  *
  10.  * $Log: msgs.c,v $
  11.  * Revision 6.0  1991/12/18  20:27:16  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16. #include "lconsole.h"
  17. #include "qmgr.h"
  18. #include "qmgr-int.h"
  19. #include <isode/cmd_srch.h>
  20. #ifdef  BSD42
  21. #include <sys/ioctl.h>
  22. #endif
  23.  
  24. #define plural(n,s)    ((n) == 1 ? "" : (s))
  25.  
  26. char *msgtolist;
  27.  
  28. msg_update() { }
  29.  
  30. static void display_all_msgs (mlp)
  31. MsgList *mlp;
  32. {
  33.     MsgInfo *mip, *msgs = mlp -> msgs;
  34.     int width, w;
  35.     int count;
  36.     char **cpp;
  37.  
  38.     for (count = 0, mip = msgs; mip; mip = mip -> next)
  39.         count ++;
  40.     cpp = (char **) smalloc (count * sizeof (char *));
  41.  
  42.     for (width = count = 0, mip = msgs; mip; mip = mip -> next) {
  43.         if ((w = strlen (mip -> permsginfo -> qid)) > width)
  44.             width = w;
  45.         cpp[count++] = mip -> permsginfo -> qid;
  46.     }
  47.     w = ncols (stdout) / (width+1);
  48.     for (count = 0, mip = msgs; mip; mip = mip -> next) {
  49.         printf ("%-*s%s", width, cpp[count],
  50.             (count + 1) % w == 0 ? "\n" : " ");
  51.         count ++;
  52.     }
  53.     if (count % w != 0)
  54.         putchar ('\n');
  55.     free ((char *)cpp);
  56. }
  57.  
  58. static void display_recip_list (rip)
  59. RecipInfo *rip;
  60. {
  61.     Strlist *sl;
  62.     int i;
  63.  
  64.     if (rip == NULL) return;
  65.  
  66.     if (rip -> id != 0)  {
  67.         for (sl = rip -> channels, i = 0; i < rip -> channelsDone; i++)
  68.             sl = sl -> next;
  69.  
  70.         printf ("%*sTo: %s (id %d)\n",
  71.             indent * 2, "",
  72.             rip -> user, rip -> id);
  73.  
  74.         indent ++;
  75.         printf ("%*sMTA %s via channel %s\n",
  76.             indent * 2, "", rip -> mta,
  77.             sl ? sl -> str : "<unknown>");
  78.         display_status (rip -> status);
  79.         if (rip -> info)
  80.             printf ("%*sError Info: %s\n",
  81.                 indent * 2, "", rip -> info);
  82.         indent --;
  83.     }
  84.     display_recip_list (rip -> next);
  85. }
  86.  
  87. void display_msg_info (mip)
  88. MsgInfo *mip;
  89. {
  90.     PerMessageInfo *pmi = mip -> permsginfo;
  91.     printf ("%*sMessage id %s\n",
  92.         indent * 2, "", pmi -> qid);
  93.     indent ++;
  94.     printf ("%*sfrom %s\n", indent * 2, "", pmi -> originator);
  95.     printf ("%*sSize %s priority %d queued since %s", indent * 2, "",
  96.         datasize (pmi -> size, ""),
  97.         pmi -> priority,
  98.         ctime (&pmi -> age));
  99.     if (pmi -> deferredTime)
  100.         printf ("%*sDeferred until %s",
  101.             indent * 2, "", ctime(&pmi -> deferredTime));
  102.     printf ("%*sWill expire at %s", indent * 2, "",
  103.         ctime(&pmi -> expiryTime));
  104.     if (pmi -> uaContentId)
  105.         printf ("%*sUA ID: %s\n", indent * 2, "", pmi -> uaContentId);
  106.     if (pmi -> errorCount)
  107.         printf ("%*sHas accumulated %d errors\n", indent * 2, "",
  108.             pmi -> errorCount);
  109.     if (pmi -> numberWarningsSent > 0)
  110.         printf ("%*sHas had %d warning%s sent\n",
  111.             indent * 2, "",
  112.             pmi -> numberWarningsSent,
  113.             plural(pmi -> numberWarningsSent, "s"));
  114.  
  115.     indent ++;
  116.     display_recip_list (mip -> recips);
  117.     indent --;
  118.     indent --;
  119.     putchar ('\n');
  120. }
  121.  
  122. /* ARGSUSED */
  123. int msglist_update(msgl, id)
  124. MsgList *msgl;
  125. int id;
  126. {
  127.     MsgInfo *mip;
  128.     int found;
  129.     char *cp;
  130.  
  131.     indent = 0;
  132.     if (msgl == NULL)
  133.         advise (NULLCP, "No messages found");
  134.     else if (msgtolist) {
  135.         found = 0;
  136.         if ((cp = re_comp (msgtolist)) != NULLCP) {
  137.             advise (NULLCP, "Expression %s: %s",
  138.                 msgtolist, cp);
  139.             free_MsgList (msgl);
  140.             return OK;
  141.         }
  142.         for (mip = msgl -> msgs; mip; mip = mip -> next)
  143.             if (re_exec (mip -> permsginfo -> qid) == 1) {
  144.                 display_msg_info (mip);
  145.                 found ++;
  146.             }
  147.         if (found == 0)
  148.             advise (NULLCP, "Message %s not found", msgtolist);
  149.     }
  150.     else if (msgl -> msgs && msgl -> msgs -> next == NULL) 
  151.         display_msg_info (msgl -> msgs);
  152.     else
  153.         display_all_msgs (msgl);
  154.  
  155.     free_MsgList (msgl);
  156.     return OK;
  157. }
  158.  
  159.  
  160. int f_msg (vec)
  161. char **vec;
  162. {
  163.     char errbuf[BUFSIZ];
  164.     int pid;
  165.     char buffer[BUFSIZ], buffer2[BUFSIZ];
  166.     char *av[NVARGS];
  167.  
  168.     if (*++vec == NULLCP) {
  169.         if (getline ("Channel: ", buffer) == NOTOK ||
  170.             str2vec (buffer, vec) < 1)
  171.             return OK;
  172.     }
  173.     av[0] = *vec;
  174.     if ((av[0] = fullchanname (av[0])) == NULLCP)
  175.         return OK;
  176.  
  177.     if (*++vec == NULLCP) {
  178.         if (getline ("Mta: ", buffer2) == NOTOK ||
  179.             str2vec(buffer2, vec) < 1)
  180.             return OK;
  181.     }
  182.     av[1] = *vec;
  183.  
  184.     if (*++vec == NULLCP) {
  185.         msgtolist = NULLCP;
  186.     }
  187.     else {
  188.         msgtolist = *vec;
  189.         *vec = NULLCP;
  190.     }
  191.     av[2] = NULLCP;
  192.     if (initiate_op (console_fd, operation_Qmgr_readChannelMtaMessage,
  193.              av, &pid, msglist_update, errbuf) == NOTOK) {
  194.         advise (NULLCP, "status operation failed: %s", errbuf);
  195.         return NOTOK;
  196.     }
  197.  
  198.     if (result_op (console_fd, &pid, errbuf) == NOTOK) {
  199.         advise (NULLCP, "result_op: %s", errbuf);
  200.         return NOTOK;
  201.     }
  202.     
  203.     return OK;
  204. }
  205.